package cn.tedu.sp06zuul.filerts;

import cn.tedu.sp1.Web.Util.JsonResult;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

@Component
public class AccessFilter extends ZuulFilter {

    @Override/*设置过滤器类型： pre前置 ， routing  ， post，  error，*/
    public String filterType() {
       // return null;
        return FilterConstants.PRE_TYPE;/*专门用于保存常量*/
    }

    @Override/*设置顺序号 */
    public int filterOrder() {
        /*前置过滤器中有五个默认过滤器，自定义过滤器放在末尾*/
        return 6;
    }

    @Override/*针对当前请求是否执行下面过滤代码*/
    public boolean shouldFilter() {
       /*调用商品需要判断权限
       * 调用用户不检查权限*/
        /*1~获得一个请求上下文的对象
        * 2从上下文对象获得的调用后台服务 serviceid
        * */
        RequestContext ctx = RequestContext.getCurrentContext();
        String serviceId = (String) ctx.get(FilterConstants.SERVICE_ID_KEY);
        return serviceId.equals("item-service");
    }

    @Override/*过滤代码:判断权限😭*/
    public Object run() throws ZuulException {
        RequestContext ctx = RequestContext.getCurrentContext();
        /*获得requste对象*/
        HttpServletRequest request = ctx.getRequest();
        //接收token参数
        String token = request.getParameter("token");
        //如果token对象不存在
        if(StringUtils.isBlank(token)){/*用于判断token是否为空*/
            /*为空则组织访问*/
            ctx.setSendZuulResponse(false);/*发送zuul响应 ，关闭:组织继续调用*/
         /*返回Json串*/ //阻止访问
            String Json = JsonResult.build().code(400).msg("未登录").toString();
            ctx.addZuulResponseHeader("Content-Type","applicaton/json;charset=UTF-8");
            ctx.setResponseBody(Json);
            System.out.println(token);
        }
        //返回结果
        return "登陆完成";/*在zull当前版本中，这个返回值无效*/
    }
}
